<?php
namespace Admin\Model;
use Think\Model;
//管理员表操作类
class AdminModel extends Model{
    // $_validate 属性定义验证规则。
    protected $_validate = [
        // [验证字段1,验证规则,错误提示,[验证条件,附加规则,验证时间]]
        ['name','/^[a-zA-Z0-9]{3,10}$/','用户名格式不正确'],
        ['name','require','用户名必须填'],
        ['name','','此用户名已存在',1,'unique',1],
        ['phone','/^[1][358][0-9]{9}$/','你的电话号码格式不正确！！！'],
        ['phone','require','手机号码必须填'],
        ['email','email','你的邮箱格式不正确！！！'],
        ['email','require','邮箱地址必填！！'],
        ['pass','require','密码必须填'],
        ['pass','/^([A-Z]|[a-z]|[0-9]{6,10}$/','你太短了，老娘不要！！' , 1, 'length' , 3], 
    ];

    // 自动完成
        // [完成字段1,完成规则,[完成条件,附加规则]],
       protected $_auto=[
            // 新增的时候把status字段设置为1
            ['status','1'], 
            //新增时将state设置为1
            ['state','1'],
            // 对update_time字段在更新的时候写入当前时间戳
            ['addtime','time',3,'function'],
            //密码通过password_hash加密 
            ['pass','myHash',3,'function'],
    ];

    //添加管理员操作
    public function admin_add(){
        $list = I('post.');
        // return $list;
        $res = $this->create();
        // return $res;
        $res = $this->add();
        return $res;
    }
    //查询所有管理员
    public function admin_sec(){
      // 得到总行数
        $totalRow = $this->count();
        // 每页显示条数
        $num = 10;
        // 实例化分页类
        $page = new \Think\Page($totalRow , $num);
        // 执行分页查询
        $list = $this->limit( $page->firstRow . ',' . $page->listRows )->select();
        //判断账户角色
        $status = ['1'=>'管理员','2'=>'超级管理员'];
        //判断当前用户状态
        $state = ['禁用','启用'];
        // 基本处理
        foreach($list as $key => &$val){
            $val['status'] = $status[ $val['status'] ];
            $val['addtime'] = date('Y-m-d H:i:s',$val['addtime']);
            $val['state'] = $state[ $val['state'] ]; 
        }
        return [
            'list'=> $list,
            'show'=> $page->show(),
        ];
    }
    //管理员登录方法
    public function admin_lg(){
        //获取该用户输入的值
        $name = I('post.name');
        $pass = I('post.pass');
        //设置查询条件
        // return $pass;
        $map['name'] = ['eq',$name];
        //执行查询语句
        $list = $this->where($map)->select();
        //判断是否有该用户
        // return $list;
        if($list){
            //如果有那就判断密码是否正确
             // return $list;
            if(password_verify($pass,$list[0]['pass'])){
                //判断当前账户状态是否是启用
                if($list[0]['state'] == 1){
                    //如果密码正确那就返回TRUE并将该用户id写进session里
                    session('admin_id',$list[0]['id']);
                    //将改用户的status写进session里
                    session('admin_status',$list[0]['status']);
                    return true;     
                }else{
                    return false;
                }
               
            }else{
                return false;
            }
        }else{
            return false;
        }

    }

    //修改管理员方法
    public function admin_up(){
        //获取待修改的id
        $id = I('get.id');
        //设置修改条件
        $map['id'] = ['eq',$id];
        //获取当前用户状态
        $state = $this->where($map)->select();
        // return $state[0]['state'];
        $state = $state[0]['state'];
        //判断是禁用还是启用
        // return $state;
        if($state == 1){
            //发送执行并接收返回值
            $res = $this->where($map)->setField('state','0');
            if($res){
                return '修改成功';
            }else{
                return $res;
                return '修改失败';
            }
        }else{   
            $res = $this->where($map)->setField('state','1');
            if($res){
                return '修改成功';
            }else{
                return $res;
                return '修改失败';
            }
        }
       
    }
    //删除管理员方法
    public function admin_del(){
        $id = I('get.id');
        //发送并执行删除语句且接收返回值
        $res = $this->delete($id);
        //判断是否删除成功
        if($res){
            return '删除成功';
        }else{
            return '删除失败'; 
        }
    }
    //查询当前登录管理员信息方法
    public function admin_seclect(){
        $id = session('admin_id');
        // 设置查询条件
        $map['id'] = ['eq',$id];
        //发送执行并接收返回值
        $list = $this->where($map)->select();
        return $list;
    }
}